home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / c / dicepj20.lha / diceproject / sources / project.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-31  |  29.7 KB  |  1,102 lines

  1.  /*
  2.  *  Source machine generated by GadToolsBox V1.4
  3.  *  which is (c) Copyright 1991,92 Jaba Development
  4.  */
  5.  
  6. #include <exec/types.h>
  7. #include <intuition/intuition.h>
  8. #include <intuition/classes.h>
  9. #include <intuition/classusr.h>
  10. #include <intuition/imageclass.h>
  11. #include <intuition/gadgetclass.h>
  12. #include <libraries/gadtools.h>
  13. #include <graphics/displayinfo.h>
  14. #include <graphics/gfxbase.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/dos_protos.h>
  17. #include <clib/intuition_protos.h>
  18. #include <clib/gadtools_protos.h>
  19. #include <clib/graphics_protos.h>
  20. #include <clib/utility_protos.h>
  21. #include <clib/diskfont_protos.h>
  22.  
  23. #include <ctype.h>
  24. #include <string.h>
  25. #include <stdlib.h>
  26.  
  27. #define CATCOMP_NUMBERS
  28.  
  29. #include "project.catalog.h"
  30.  
  31. #include "project.h"
  32.  
  33. UWORD ProjectLeft = 0;
  34. UWORD ProjectTop = 409;
  35. UWORD ProjectWidth = 728;
  36. UWORD ProjectHeight = 144;
  37.  
  38. UWORD MessLeft = 0;
  39. UWORD MessTop = 426;
  40. UWORD MessWidth = 728;
  41. UWORD MessHeight = 127;
  42.  
  43. struct Window          *ParmsLineWnd = NULL;
  44. struct Gadget          *ParmsLineGList = NULL;
  45. struct Gadget          *ParmsLineGadgets[3];
  46.  
  47. struct Screen          *Scr = NULL;
  48. APTR               VisualInfo = NULL;
  49. struct Window          *ProjectWnd = NULL;
  50. struct Window          *MessWnd = NULL;
  51. struct Window          *DirSetWnd = NULL;
  52. struct Window          *CompileWnd = NULL;
  53. struct Gadget          *ProjectGList = NULL;
  54. struct Gadget          *MessGList = NULL;
  55. struct Gadget          *DirSetGList = NULL;
  56. struct Gadget          *CompileGList = NULL;
  57. struct Menu          *ProjectMenus = NULL;
  58. struct IntuiMessage    ProjectMsg;
  59. struct IntuiMessage    MessMsg;
  60. struct IntuiMessage    DirSetMsg;
  61. struct IntuiMessage    CompileMsg;
  62. struct TextFont       *NFont       = NULL;
  63. struct Gadget          *ProjectGadgets[1];
  64. struct Gadget          *MessGadgets[1];
  65. struct Gadget          *DirSetGadgets[16];
  66. struct Gadget          *CompileGadgets[2];
  67. UWORD               DirSetZoom[4],ProjectZoom[4],MessZoom[4],ParmsLineZoom[4],CompileZoom[4];
  68. UBYTE              *ProjectWdt = (UBYTE *)"Project Handler : Sources Window / Project Name : No Name";
  69. UBYTE              *DirSetWdt = (UBYTE *)"Project Handler : Directory settings";
  70. UBYTE              *MessWdt = (UBYTE *)"Project Handler : Messages Window";
  71. UBYTE              *ParmsLineWdt = (UBYTE *)"Project Handler : Parameters Line";
  72. UBYTE              *CompileWdt = (UBYTE *)"Project Handler : Processing";
  73. struct TextAttr       *Font, Attr;
  74. UWORD               FontX, FontY;
  75. UWORD               OffX, OffY;
  76.  
  77. struct NewScreen ns = { 0,0,0,0,2,0,1,0,0,NULL,
  78.     "DICE Project Handler Screen 2.0 ©1993 by Cedric Counotte",
  79.   };
  80.  
  81. struct TextAttr times13 = {
  82.     ( STRPTR )"times.font", 13, 0x00, 0x20 };
  83.  
  84. struct TextAttr topaz8 = {
  85.     ( STRPTR )"topaz.font", 8, 0x00, 0x20 };
  86.  
  87. struct IntuiText ProjectIText[] = {
  88.     1, 0, JAM1,10, 9, &topaz8, (UBYTE *)"Source Object  C Module Name", NULL };
  89.  
  90. #define Project_TNUM 1
  91.  
  92. struct IntuiText CompileIText[] = {
  93.     1, 0, JAM2,148, 14, ×13, NULL, NULL,
  94.     2, 0, JAM1,147, 13, ×13, NULL, NULL };
  95.  
  96. #define Compile_TNUM 2
  97.  
  98. struct NewMenu ProjectNewMenu[] = {
  99.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  100.     NM_ITEM, (STRPTR)"New", (STRPTR)"N", 0, 0L, (APTR)ProjectNew,
  101.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  102.     NM_ITEM, (STRPTR)"Open", (STRPTR)"O", 0, 0L, (APTR)ProjectOpen,
  103.     NM_ITEM, (STRPTR)"Save", (STRPTR)"S", 0, 0L, (APTR)ProjectSave,
  104.     NM_ITEM, (STRPTR)"Save as", (STRPTR)"K", 0, 0L, (APTR)ProjectSaveas,
  105.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  106.     NM_ITEM, (STRPTR)"Iconify", (STRPTR)"I", 0, 0L, (APTR)ProjectIcon,
  107.     NM_ITEM, (STRPTR)"About...", (STRPTR)"J", 0, 0L, (APTR)ProjectAbout,
  108.     NM_ITEM, "Help..." , (STRPTR)"H" , 0 , 0L , (APTR)ProjectHelp,
  109.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)ProjectQuit,
  110.     NM_TITLE, (STRPTR)"Objects", NULL, 0, NULL, NULL,
  111.     NM_ITEM, (STRPTR)"Edit", (STRPTR)"E", 0, 0L, (APTR)ProjectEdit,
  112.     NM_ITEM, (STRPTR)"Include Files", (STRPTR)"F", 0, 0L, (APTR)ProjectInclude,
  113.     NM_ITEM, (STRPTR)"Comments", NULL , 0 , 0L , NULL,
  114.     NM_SUB , (STRPTR)"Edit",(STRPTR)"+" , 0 , 0L , (APTR)ProjectComment,
  115.     NM_SUB , (STRPTR)"Remove",(STRPTR)"-" , 0 , 0L , (APTR)ProjectCommentKill,
  116.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  117.     NM_ITEM, (STRPTR)"Add", (STRPTR)"A", 0, 0L, (APTR)ProjectAdd,
  118.     NM_ITEM, (STRPTR)"Remove", (STRPTR)"R", 0, 0L, (APTR)ProjectRem,
  119.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  120.     NM_ITEM, (STRPTR)"Open Extern", (STRPTR)"X", 0, 0L, (APTR)ProjectOther,
  121.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  122.     NM_ITEM, "Open Autodocs" , "D" , 0 , 0L , (APTR)ProjectAutoDocs,
  123.     NM_TITLE, (STRPTR)"Code", NULL, 0, NULL, NULL,
  124.     NM_ITEM, "Make Final Object" , (STRPTR)"M" , 0 , 0L , (APTR)ProjectMakeFO,
  125.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  126.     NM_ITEM, (STRPTR)"Compile", (STRPTR)"C", 0, 0L, (APTR)ProjectCompile,
  127.     NM_ITEM, (STRPTR)"Compile all", (STRPTR)"G", 0, 0L, (APTR)ProjectGenerate,
  128.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  129.     NM_ITEM, (STRPTR)"Launch" , NULL , 0 , 0L , NULL ,
  130.     NM_SUB ,(STRPTR)"From CLI" , (STRPTR)"T" , 0 , 0L , (APTR)ProjectLaunch,
  131.     NM_SUB , (STRPTR)"Parameters Line" , (STRPTR)"L" , 0 , 0L , (APTR)ProjectLaunchOpt,
  132.     NM_ITEM, (STRPTR)"Information", (STRPTR)"Y", 0, 0L, (APTR)ProjectCodeInfo,
  133.     NM_TITLE, (STRPTR)"Preferences", NULL, 0, NULL, NULL,
  134.     NM_ITEM, "Main Options", "1", 0, 0L, (APTR)ProjectMainOpt,
  135.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  136.     NM_ITEM, (STRPTR)"Compiler", "2", 0, 0L, (APTR)ProjectCompilerOpt,
  137.     NM_ITEM, (STRPTR)"Linker" , "3" , 0 , 0L , (APTR)ProjectLinkerOpt,
  138.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  139.     NM_ITEM, (STRPTR)"Directories", "4", 0, 0L, (APTR)ProjectDirectory,
  140.     NM_ITEM, (STRPTR)"Editor" , "5" , 0 , 0L , (APTR)ProjectEditorOpt,
  141.     NM_ITEM, (STRPTR)"Screen", "6", 0, 0L, (APTR)ProjectScreenOpt,
  142.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  143.     NM_ITEM, (STRPTR)"Close Workbench", "W" , NULL ,0,(APTR)ProjectCloseWB,
  144.     NM_ITEM,(STRPTR)"Open Workbench" , "Z" , NULL , 0 , (APTR)ProjectOpenWB,
  145.     NM_ITEM, (STRPTR)"Save Preferences" , "V",0,0L,(APTR)SavePrefs,
  146.     NM_END, NULL, NULL, 0, 0L, NULL };
  147.  
  148. UWORD ParmsLineGTypes[] = {
  149.     BUTTON_KIND,
  150.     BUTTON_KIND,
  151.     STRING_KIND
  152. };
  153.  
  154. struct NewGadget ParmsLineNGad[] = {
  155.     33, 29, 101, 18, NULL, NULL, 1, PLACETEXT_IN, NULL, (APTR)NULL,
  156.     222, 29, 101, 18, NULL, NULL, 2, PLACETEXT_IN, NULL, (APTR)NULL,
  157.     8, 6, 346, 17, NULL, NULL, 3, PLACETEXT_ABOVE, NULL, (APTR)NULL
  158. };
  159.  
  160. ULONG ParmsLineGTags[] = {
  161.     (GT_Underscore), '_', (TAG_DONE),
  162.     (GT_Underscore), '_', (TAG_DONE),
  163.     (GT_Underscore), '_', (GTST_MaxChars), 256, (TAG_DONE)
  164. };
  165.  
  166. UWORD ProjectGTypes[] = {
  167.     LISTVIEW_KIND
  168. };
  169.  
  170. UWORD MessGTypes[] = {
  171.     LISTVIEW_KIND
  172. };
  173.  
  174. UWORD DirSetGTypes[] = {
  175.     BUTTON_KIND, BUTTON_KIND, BUTTON_KIND, BUTTON_KIND, BUTTON_KIND, BUTTON_KIND,
  176.     TEXT_KIND, TEXT_KIND, TEXT_KIND, TEXT_KIND, TEXT_KIND TEXT_KIND,
  177.     BUTTON_KIND,TEXT_KIND
  178.     BUTTON_KIND, BUTTON_KIND,
  179. };
  180.  
  181. UWORD CompileGTypes[] = {
  182.     TEXT_KIND, BUTTON_KIND
  183. };
  184.  
  185. struct NewGadget ProjectNGad[] = {
  186.     3, 15, -6, -25, NULL, NULL, GD_ModuleList, 0, NULL, (APTR)ModuleListClicked
  187. };
  188.  
  189. struct NewGadget MessNGad[] = {
  190.     3, 3, -6, -14, NULL, NULL, GD_ModuleList, 0, NULL, (APTR)MessListClicked
  191. };
  192.  
  193. struct NewGadget DirSetNGad[] = {
  194.     5, 4, 101, 15, (UBYTE *)"_Sources", NULL, GD_Source, PLACETEXT_IN, NULL, (APTR)SourceClicked,
  195.     5, 26, 101, 15, (UBYTE *)"Des_tination", NULL, GD_Dest, PLACETEXT_IN, NULL, (APTR)DestClicked,
  196.     5, 48, 101, 15, (UBYTE *)"_Includes", NULL, GD_Include, PLACETEXT_IN, NULL, (APTR)IncludeClicked,
  197.     5, 70, 101, 15, (UBYTE *)"_Libraries", NULL, GD_Lib, PLACETEXT_IN, NULL, (APTR)LibClicked,
  198.     5, 92, 101, 15, (UBYTE *)"_Objects", NULL, GD_Obj, PLACETEXT_IN, NULL, (APTR)ObjClicked,
  199.     5, 114, 101, 15, (UBYTE *)"_DICE", NULL, GD_Prg, PLACETEXT_IN, NULL, (APTR)PrgClicked,
  200.     113, 4, 206, 15, NULL, NULL, GD_SourceString, 0, NULL, NULL,
  201.     113, 26, 206, 15, NULL, NULL, GD_DestString, 0, NULL, NULL,
  202.     113, 48, 206, 15, NULL, NULL, GD_IncludeString, 0, NULL, NULL,
  203.     113, 70, 206, 15, NULL, NULL, GD_LibString, 0, NULL, NULL,
  204.     113, 92, 206, 15, NULL, NULL, GD_ObjString, 0, NULL, NULL,
  205.     113, 114, 206, 15, NULL, NULL, GD_PrgString, 0, NULL, NULL,
  206.     5, 136, 101, 15, (UBYTE *)"Auto_docs", NULL, GD_Prg, PLACETEXT_IN, NULL, (APTR)AutoDocClicked,
  207.     113, 136, 206, 15, NULL, NULL, GD_PrgString+1, 0, NULL, NULL,
  208.     30, 158 , 100 , 15 , NULL , NULL , 50 , PLACETEXT_IN , NULL , DirSetUseClicked,
  209.     189 , 158 , 100 , 15 , NULL , NULL , 50 , PLACETEXT_IN , NULL , DirSetCancelClicked,
  210. };
  211.  
  212. struct NewGadget CompileNGad[] = {
  213.     5, 19, 284, 12, NULL, NULL, GD_CompileName, 0, NULL, NULL,
  214. };
  215.  
  216. ULONG ProjectGTags[] = {
  217.     (GTLV_ShowSelected), NULL, (TAG_DONE)
  218. };
  219.  
  220. ULONG MessGTags[] = {
  221.     (TAG_DONE)
  222. };
  223.  
  224. ULONG DirSetGTags[] = {
  225.     (GT_Underscore), '_', (TAG_DONE),
  226.     (GT_Underscore), '_', (TAG_DONE),
  227.     (GT_Underscore), '_', (TAG_DONE),
  228.     (GT_Underscore), '_', (TAG_DONE),
  229.     (GT_Underscore), '_', (TAG_DONE),
  230.     (GT_Underscore), '_', (TAG_DONE),
  231.     (GTTX_Border), TRUE, (TAG_DONE),
  232.     (GTTX_Border), TRUE, (TAG_DONE),
  233.     (GTTX_Border), TRUE, (TAG_DONE),
  234.     (GTTX_Border), TRUE, (TAG_DONE),
  235.     (GTTX_Border), TRUE, (TAG_DONE),
  236.     (GTTX_Border), TRUE, (TAG_DONE),
  237.     (GA_Disabled) , FALSE , (GT_Underscore), '_', (TAG_DONE),
  238.     (GA_Disabled) , FALSE , (GTTX_Border), TRUE, (TAG_DONE),
  239.     (GT_Underscore), '_', (TAG_DONE),
  240.     (GT_Underscore), '_', (TAG_DONE),
  241. };
  242.  
  243. ULONG CompileGTags[] = {
  244.     (GTTX_Border), TRUE, (TAG_DONE),
  245.     (TAG_DONE)
  246. };
  247.  
  248. struct ColorSpec ScreenColors[] = {
  249.      0, 0x0C, 0x0B, 0x09,
  250.      1, 0x00, 0x00, 0x00,
  251.      2, 0x0F, 0x0F, 0x0F,
  252.      3, 0x08, 0x06, 0x05,
  253.      4, 0x00, 0x00, 0x0F,
  254.      5, 0x0F, 0x00, 0x00,
  255.      6, 0x00, 0x0F, 0x00,
  256.      7, 0x0F, 0x0F, 0x00,
  257.      8, 0x06, 0x02, 0x00,
  258.      9, 0x0A, 0x06, 0x04,
  259.     10, 0x0E, 0x0A, 0x08,
  260.     11, 0x00, 0x0A, 0x00,
  261.     12, 0x08, 0x0F, 0x0A,
  262.     13, 0x08, 0x08, 0x08,
  263.     14, 0x06, 0x06, 0x06,
  264.     15, 0x0C, 0x0C, 0x0C,
  265.     ~0, 0x00, 0x00, 0x00 };
  266.  
  267. UWORD DriPens[] = {
  268.     0,1,1,2,1,3,1,0,2,~0 };
  269.  
  270. UWORD ComputeX( UWORD value )
  271. {
  272.     return(( UWORD )((( FontX * value ) + 3 ) / 7 ));
  273. }
  274.  
  275. UWORD ComputeY( UWORD value )
  276. {
  277.     return(( UWORD )((( FontY * value ) + 6 ) / 13 ));
  278. }
  279.  
  280. UWORD IComputeX( UWORD value )
  281. {
  282.     return(( UWORD )((( 7 * value ) - 3 ) / FontX ));
  283. }
  284.  
  285. UWORD IComputeY( UWORD value )
  286. {
  287.     return(( UWORD )((( 13 * value ) - 6 ) / FontY ));
  288. }
  289.  
  290. void ComputeFont( UWORD width, UWORD height )
  291. {
  292.     Font = &Attr;
  293.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  294.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  295.     FontX = Scr->RastPort.Font->tf_XSize;
  296.  
  297.     OffX = Scr->WBorLeft;
  298.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  299.  
  300.     if ( width && height ) {
  301.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  302.             goto UseTopaz;
  303.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  304.             goto UseTopaz;
  305.     }
  306.     return;
  307.  
  308. UseTopaz:
  309.     Font->ta_Name = (STRPTR)"topaz.font";
  310.     FontX = FontY = Font->ta_YSize = 8;
  311. }
  312.  
  313. char PubName[20] = "DICE_Project";
  314.  
  315. BOOL Owner;
  316.  
  317. int SetupScreen( void )
  318. {
  319.   LONG PubNum = 9;
  320.   char *temp,*temp2;
  321.   struct TagItem *ti;
  322.  
  323.     if ( Scr )
  324.     return(0);
  325.     if ( ti = FindTagItem( SA_Pens , ScreenTags ) )
  326.     if ( ((UWORD *)ti->ti_Data)[0]!=~0 )
  327.     {
  328.         ns.DetailPen = ((UWORD *)ti->ti_Data)[0];
  329.         ns.BlockPen = ((UWORD *)ti->ti_Data)[1];
  330.     }
  331.     else
  332.     {
  333.         ns.DetailPen = 0;
  334.         ns.BlockPen = 1;
  335.     }
  336.     ti = FindTagItem( SA_PubName , ScreenTags );
  337.     Owner = FALSE;
  338.     if ( ti )
  339.     {
  340.     temp2 = (char *)ti->ti_Data;
  341.     temp = malloc( strlen( temp2 ) + 3 );
  342.     strcpy( temp , temp2 );
  343.     strcat( temp , ".0" );
  344.     while ( !( Scr = OpenScreenTagList( &ns , ScreenTags ) ) && PubNum-- )
  345.     {
  346.         ti->ti_Data = temp;
  347.         temp[ strlen(temp) - 1 ] ++;
  348.     }
  349.     if ( (char *)(ti->ti_Data) == temp )
  350.         free( temp2 );
  351.     if ( !Scr )
  352.         Message( StrMessages[MSG_MESSAGE_CANT_OPEN_PUBSCR] , StrMessages[MSG_MESSAGE_ABORT] );
  353.     Owner = TRUE;
  354.     } else
  355.     if ( !(Scr = LockPubScreen( NULL ) ) )
  356.         Message( StrMessages[MSG_MESSAGE_WHERE_WB] , StrMessages[MSG_MESSAGE_ABORT] );
  357.     if ( Scr )
  358.     {
  359.     ti = FindTagItem( SA_Font , ScreenTags );
  360.     if ( ti )
  361.         NFont = OpenDiskFont( (struct TextAttr *)ti->ti_Data );
  362.     else
  363.         NFont = OpenDiskFont( ×13 );
  364.     VisualInfo = GetVisualInfoA( Scr , NULL );
  365.     ComputeFont( 0, 0 );
  366.     if ( !(Scr->Flags&WBENCHSCREEN) )
  367.         PubScreenStatus( Scr , ~PSNF_PRIVATE );
  368.     SetPubScreenModes( SHANGHAI|POPPUBSCREEN );
  369.     return( 0L );
  370.     }
  371.     return( 1L );
  372. }
  373.  
  374. int CloseDownScreen( void )
  375. {
  376.   BOOL succ=NULL,retry=TRUE;
  377.  
  378.     if ( Owner )
  379.     {
  380.     while ( !(succ = CloseScreen( Scr )) && retry )
  381.     {
  382.         ActivateWindow( Scr->FirstWindow );
  383.         retry =  Message( StrMessages[MSG_MESSAGE_CANT_CLOSESCR] , StrMessages[MSG_MESSAGE_RETRY_ABORT] );
  384.     }
  385.     if ( succ )
  386.         Scr = NULL;
  387.     else
  388.         return(0);
  389.     }
  390.     else
  391.     {
  392.     UnlockPubScreen( NULL , Scr );
  393.     Scr = NULL;
  394.     }
  395.     if ( VisualInfo ) {
  396.     FreeVisualInfo( VisualInfo );
  397.     VisualInfo = NULL;
  398.     }
  399.     if ( NFont ) {
  400.     CloseFont( NFont );
  401.     NFont = NULL;
  402.     }
  403. }
  404.  
  405. void ProjectRender( void )
  406. {
  407.     struct IntuiText    it;
  408.     UWORD            cnt;
  409.  
  410.     for ( cnt = 0; cnt < Project_TNUM; cnt++ ) {
  411.         CopyMem(( char * )&ProjectIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  412.         it.ITextFont = &topaz8;
  413.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  414.         PrintIText( ProjectWnd->RPort, &it, 0, 0 );
  415.     }
  416. }
  417.  
  418. BOOL Changed;
  419.  
  420. int HandleProjectIDCMP( void )
  421. {
  422.     struct IntuiMessage    *m;
  423.     struct MenuItem     *n;
  424.     int            (*func)(void);
  425.     BOOL            running = TRUE;
  426.  
  427.     Changed = FALSE;
  428.     while( !Changed && (m = GT_GetIMsg( ProjectWnd->UserPort )) ) {
  429.  
  430.         CopyMem(( char * )m, ( char * )&ProjectMsg, (long)sizeof( struct IntuiMessage ));
  431.  
  432.         GT_ReplyIMsg( m );
  433.  
  434.         switch ( ProjectMsg.Class ) {
  435.  
  436.             case    IDCMP_REFRESHWINDOW:
  437.                 GT_BeginRefresh( ProjectWnd );
  438.                 GT_EndRefresh( ProjectWnd, TRUE );
  439.                 break;
  440.  
  441.             case    IDCMP_CLOSEWINDOW:
  442.                 return( ProjectCloseWindow() );
  443.                 break;
  444.  
  445.             case    IDCMP_NEWSIZE:
  446.                 running = ProjectNewSize();
  447.                 return( running );
  448.                 break;
  449.  
  450.             case    IDCMP_GADGETUP:
  451.                 func = ( void * )(( struct Gadget * )ProjectMsg.IAddress )->UserData;
  452.                 running = func();
  453.                 break;
  454.  
  455.             case    IDCMP_MENUPICK:
  456.                 while( ProjectMsg.Code != MENUNULL ) {
  457.                     n = ItemAddress( ProjectMenus, ProjectMsg.Code );
  458.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  459.                     running = func();
  460.                     if ( Changed )
  461.                         return;
  462.                     ProjectMsg.Code = n->NextSelect;
  463.                 }
  464.                 break;
  465.             case    IDCMP_VANILLAKEY:
  466.                 switch( ProjectMsg.Code ) {
  467.                   case 27:
  468.                     running = MessCloseWindow();
  469.                     break;
  470.                   case 13:
  471.                     ProjectEdit( );
  472.                     break;
  473.                   default:
  474.                     ProjectMsg.Code = tolower( ProjectMsg.Code );
  475.                     if ( isalpha(ProjectMsg.Code) ) {
  476.                     FindSelectedModule( ProjectMsg.Code );
  477.                     }
  478.                     break;
  479.                 }
  480.                 break;
  481.             case    IDCMP_RAWKEY:
  482.                 switch( ProjectMsg.Code ) {
  483.                   case CURSORUP:
  484.                     if ( ProjectMsg.Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT) )
  485.                     PrevMessage( );
  486.                     else
  487.                     PrevModule( );
  488.                     break;
  489.                   case CURSORDOWN:
  490.                     if ( ProjectMsg.Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT) )
  491.                     NextMessage( );
  492.                     else
  493.                     NextModule( );
  494.                     break;
  495.                   case 95:
  496.                     ChargeAide( "WIN_Sources" );
  497.                     break;
  498.                 }
  499.         }
  500.     }
  501.     return( running );
  502. }
  503.  
  504. int OpenProjectWindow( void )
  505. {
  506.     struct NewGadget    ng;
  507.     struct Gadget    *g;
  508.     UWORD        lc, tc;
  509.     UWORD        wleft = ProjectLeft, wtop = ProjectTop, ww, wh;
  510.  
  511.     ww = ComputeX( ProjectWidth );
  512.     wh = ComputeY( ProjectHeight );
  513.  
  514.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  515.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  516.  
  517.     if (( wleft + ww ) > Scr->Width ) ww = Scr->Width - OffX - Scr->WBorRight;
  518.     if (( wtop + wh ) > Scr->Height ) wh = Scr->Height - OffY - Scr->WBorBottom ;
  519.  
  520.     if ( ! ( g = CreateContext( &ProjectGList )))
  521.         return( 1L );
  522.  
  523.     for( lc = 0, tc = 0; lc < Project_CNT; lc++ ) {
  524.  
  525.         CopyMem((char * )&ProjectNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  526.  
  527.         ng.ng_VisualInfo = VisualInfo;
  528.         ng.ng_TextAttr     = &topaz8;
  529.         ng.ng_LeftEdge = OffX + ComputeX( ng.ng_LeftEdge );
  530.         ng.ng_TopEdge = OffY + ComputeY( ng.ng_TopEdge );
  531.         ng.ng_Width = IComputeX( ww ) + ng.ng_Width;
  532.         ng.ng_Height = IComputeY( wh ) + ng.ng_Height;
  533.         ng.ng_Width = ComputeX( ng.ng_Width );
  534.         ng.ng_Height = ComputeY( ng.ng_Height);
  535.  
  536.         ProjectGadgets[ lc ] = g = CreateGadgetA((ULONG)ProjectGTypes[ lc ], g, &ng, ( struct TagItem * )&ProjectGTags[ tc ] );
  537.  
  538.         while( ProjectGTags[ tc ] ) tc += 2;
  539.         tc++;
  540.  
  541.         if ( NOT g )
  542.             return( 2L );
  543.     }
  544.  
  545.     if ( ! ( ProjectMenus = CreateMenusA( ProjectNewMenu, 0L )))
  546.         return( 3L );
  547.  
  548.     LayoutMenus( ProjectMenus, VisualInfo, TAG_DONE );
  549.  
  550.  
  551.     ProjectZoom[0] = ProjectLeft;
  552.     ProjectZoom[1] = ProjectTop;
  553.     ProjectZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)ProjectWdt, strlen((char *)ProjectWdt )) + 80;
  554.     ProjectZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  555.  
  556.     if ( ! ( ProjectWnd = OpenWindowTags( NULL,
  557.                 WA_Left,    wleft,
  558.                 WA_Top,     wtop,
  559.                 WA_Width,    ww + OffX + Scr->WBorRight,
  560.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  561.                 WA_IDCMP,    IDCMP_NEWSIZE|LISTVIEWIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|IDCMP_VANILLAKEY|IDCMP_RAWKEY,
  562.                 WA_Flags,    WFLG_SIZEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SIZEBBOTTOM|WFLG_SMART_REFRESH,
  563.                 WA_Gadgets,    ProjectGList,
  564.                 WA_Title,    ProjectWdt,
  565.                 WA_PubScreen,    Scr,
  566.                 WA_Activate ,    TRUE,
  567.                 WA_MinWidth,    360,
  568.                 WA_MinHeight,    100,
  569.                 WA_MaxWidth,    ~0,
  570.                 WA_MaxHeight,    ~0,
  571.                 WA_Zoom , ProjectZoom,
  572.                 TAG_DONE )))
  573.     return( 4L );
  574.  
  575.     SetMenuStrip( ProjectWnd, ProjectMenus );
  576.     GT_RefreshWindow( ProjectWnd, NULL );
  577.  
  578.     ProjectRender();
  579.  
  580.     return( 0L );
  581. }
  582.  
  583. void CloseProjectWindow( void )
  584. {
  585.     ProjectTop = ProjectWnd->TopEdge;
  586.     ProjectLeft = ProjectWnd->LeftEdge;
  587.  
  588.     ProjectWidth = IComputeX( ProjectWnd->Width - OffX - Scr->WBorRight + 1 );
  589.     ProjectHeight = IComputeY( ProjectWnd->Height - OffY - Scr->WBorBottom + 1 );
  590.  
  591.     Changed = TRUE;
  592.  
  593.     if ( ProjectMenus      ) {
  594.         ClearMenuStrip( ProjectWnd );
  595.         FreeMenus( ProjectMenus );
  596.         ProjectMenus = NULL;    }
  597.  
  598.     if ( ProjectWnd        ) {
  599.         CloseWindow( ProjectWnd );
  600.         ProjectWnd = NULL;
  601.     }
  602.  
  603.     if ( ProjectGList      ) {
  604.         FreeGadgets( ProjectGList );
  605.         ProjectGList = NULL;
  606.     }
  607. }
  608.  
  609. int HandleMessIDCMP( void )
  610. {
  611.     struct IntuiMessage    *m;
  612.     struct MenuItem     *n;
  613.     int            (*func)(void);
  614.     BOOL            running = TRUE;
  615.  
  616.     while( (MessWnd != NULL ) && (m = GT_GetIMsg( MessWnd->UserPort )) ) {
  617.  
  618.         CopyMem(( char * )m, ( char * )&MessMsg, (long)sizeof( struct IntuiMessage ));
  619.  
  620.         GT_ReplyIMsg( m );
  621.  
  622.         switch ( MessMsg.Class ) {
  623.  
  624.             case    IDCMP_REFRESHWINDOW:
  625.                 GT_BeginRefresh( MessWnd );
  626.                 GT_EndRefresh( MessWnd, TRUE );
  627.                 break;
  628.  
  629.             case    IDCMP_VANILLAKEY:
  630.                 switch( MessMsg.Code ) {
  631.                   case 27:
  632.                     running = MessCloseWindow();
  633.                     return( running );
  634.                     break;
  635.                   case 13:
  636.                     ProjectEdit( );
  637.                     break;
  638.                 }
  639.                 break;
  640.             case    IDCMP_RAWKEY:
  641.                 switch( MessMsg.Code ) {
  642.                   case CURSORUP:
  643.                     if ( MessMsg.Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT) )
  644.                     PrevMessage( );
  645.                     else
  646.                     PrevModule( );
  647.                     break;
  648.                   case CURSORDOWN:
  649.                     if ( MessMsg.Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT) )
  650.                     NextMessage( );
  651.                     else
  652.                     NextModule( );
  653.                     break;
  654.                   case 95:
  655.                     ChargeAide( "WIN_Messages" );
  656.                 }
  657.                 break;
  658.             case    IDCMP_CLOSEWINDOW:
  659.                 running = MessCloseWindow();
  660.                 return( running );
  661.                 break;
  662.  
  663.             case    IDCMP_NEWSIZE:
  664.                 running = MessNewSize();
  665.                 return(0);
  666.                 break;
  667.  
  668.             case    IDCMP_GADGETUP:
  669.                 func = ( void * )(( struct Gadget * )MessMsg.IAddress )->UserData;
  670.                 running = func();
  671.                 break;
  672.  
  673.             case    IDCMP_MENUPICK:
  674.                 while( MessMsg.Code != MENUNULL ) {
  675.                     n = ItemAddress( ProjectMenus, MessMsg.Code );
  676.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  677.                     running = func();
  678.                     MessMsg.Code = n->NextSelect;
  679.                 }
  680.                 break;
  681.         }
  682.     }
  683.     return( running );
  684. }
  685.  
  686. int OpenMessWindow( void )
  687. {
  688.     struct NewGadget    ng;
  689.     struct Gadget    *g;
  690.     UWORD        lc, tc;
  691.     UWORD        wleft = MessLeft, wtop = MessTop, ww, wh;
  692.  
  693.     ww = ComputeX( MessWidth );
  694.     wh = ComputeY( MessHeight );
  695.  
  696.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  697.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  698.  
  699.     if ( ! ( g = CreateContext( &MessGList )))
  700.         return( 1L );
  701.  
  702.     for( lc = 0, tc = 0; lc < Project_CNT; lc++ ) {
  703.  
  704.         CopyMem((char * )&MessNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  705.  
  706.         ng.ng_VisualInfo = VisualInfo;
  707.         ng.ng_TextAttr     = Font;
  708.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  709.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  710.         ng.ng_Width     = ComputeX( MessWidth + ng.ng_Width );
  711.         ng.ng_Height     = ComputeY( MessHeight + ng.ng_Height);
  712.  
  713.         MessGadgets[ lc ] = g = CreateGadgetA((ULONG)MessGTypes[ lc ], g, &ng, ( struct TagItem * )&MessGTags[ tc ] );
  714.  
  715.         while( MessGTags[ tc ] ) tc += 2;
  716.         tc++;
  717.  
  718.         if ( NOT g )
  719.             return( 2L );
  720.     }
  721.  
  722.  
  723.     MessZoom[0] = MessLeft;
  724.     MessZoom[1] = MessTop;
  725.     MessZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)MessWdt, strlen((char *)MessWdt )) + 80;
  726.     MessZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  727.  
  728.     if ( ! ( MessWnd = OpenWindowTags( NULL,
  729.                 WA_Left,    wleft,
  730.                 WA_Top,     wtop,
  731.                 WA_Width,    ww + OffX + Scr->WBorRight,
  732.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  733.                 WA_IDCMP,    IDCMP_NEWSIZE|LISTVIEWIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|IDCMP_VANILLAKEY|IDCMP_RAWKEY,
  734.                 WA_Flags,    WFLG_SIZEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SIZEBBOTTOM|WFLG_SMART_REFRESH,
  735.                 WA_Gadgets,    MessGList,
  736.                 WA_Title,    MessWdt,
  737.                 WA_PubScreen,         Scr,
  738.                 WA_MinWidth,    360,
  739.                 WA_MinHeight,    70,
  740.                 WA_MaxWidth,    ~0,
  741.                 WA_MaxHeight,    ~0,
  742.                 WA_Zoom,    MessZoom,
  743.                 TAG_DONE )))
  744.     return( 4L );
  745.  
  746.     if ( ROMVersion >= 39 )
  747.         LendMenus( MessWnd , ProjectWnd );
  748.     else
  749.         SetMenuStrip( MessWnd, ProjectMenus );
  750.     GT_RefreshWindow( MessWnd, NULL );
  751.  
  752.     return( 0L );
  753. }
  754.  
  755. void CloseMessWindow( void )
  756. {
  757.     MessTop = MessWnd->TopEdge;
  758.     MessLeft = MessWnd->LeftEdge;
  759.  
  760.     MessWidth = IComputeX( MessWnd->Width - OffX - Scr->WBorRight + 1 );
  761.     MessHeight = IComputeY( MessWnd->Height - OffY - Scr->WBorBottom + 1);
  762.  
  763.     if ( ProjectMenus      )
  764.         ClearMenuStrip( MessWnd );
  765.  
  766.     if ( MessWnd        ) {
  767.         CloseWindow( MessWnd );
  768.         MessWnd = NULL;
  769.     }
  770.  
  771.     if ( MessGList      ) {
  772.         FreeGadgets( MessGList );
  773.         MessGList = NULL;
  774.     }
  775. }
  776.  
  777. int HandleDirSetIDCMP( void )
  778. {
  779.     struct IntuiMessage    *m;
  780.     int            (*func)(void);
  781.     BOOL            running = TRUE;
  782.  
  783.     while( DirSetWnd != NULL && (m = GT_GetIMsg( DirSetWnd->UserPort )) ) {
  784.  
  785.         CopyMem(( char * )m, ( char * )&DirSetMsg, (long)sizeof( struct IntuiMessage ));
  786.  
  787.         GT_ReplyIMsg( m );
  788.  
  789.         switch ( DirSetMsg.Class ) {
  790.  
  791.             case    IDCMP_REFRESHWINDOW:
  792.                 GT_BeginRefresh( DirSetWnd );
  793.                 GT_EndRefresh( DirSetWnd, TRUE );
  794.                 break;
  795.  
  796.             case    IDCMP_VANILLAKEY:
  797.                 switch( DirSetMsg.Code )  {
  798.                   case 's':
  799.                   case 'S':
  800.                     running = SourceClicked( );
  801.                     break;
  802.                   case 't':
  803.                   case 'T':
  804.                     running = DestClicked( );
  805.                     break;
  806.                   case 'i':
  807.                   case 'I':
  808.                     running = IncludeClicked( );
  809.                     break;
  810.                   case 'l':
  811.                   case 'L':
  812.                     running = LibClicked( );
  813.                     break;
  814.                   case 'o':
  815.                   case 'O':
  816.                     running = ObjClicked( );
  817.                     break;
  818.                   case 'd':
  819.                   case 'D':
  820.                     running = PrgClicked( );
  821.                     break;
  822.                   case 'u':
  823.                   case 'U':
  824.                     running = DirSetUseClicked( );
  825.                     break;
  826.                   case 'A':
  827.                   case 'a':
  828.                     running = DirSetCancelClicked( );
  829.                     break;
  830.                   case 'c':
  831.                   case 'C':
  832.                     running = AutoDocClicked( );
  833.                 }
  834.                 break;
  835.  
  836.             case    IDCMP_GADGETUP:
  837.                 func = ( void * )(( struct Gadget * )DirSetMsg.IAddress )->UserData;
  838.                 running = func();
  839.                 break;
  840.  
  841.                 break;
  842.             case    IDCMP_RAWKEY:
  843.                 if ( DirSetMsg.Code == 95 )
  844.                     ChargeAide( "WIN_Dir" );
  845.                 break;
  846.         }
  847.     }
  848.     return( running );
  849. }
  850.  
  851. int OpenDirSetWindow( void )
  852. {
  853.     struct NewGadget    ng;
  854.     struct Gadget    *g;
  855.     UWORD        lc, tc;
  856.     UWORD        wleft = 182, wtop = 200, ww, wh;
  857.  
  858.     ComputeFont( 325, 179 );
  859.  
  860.     ww = ComputeX( 325 );
  861.     wh = ComputeY( 179 );
  862.  
  863.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  864.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  865.  
  866.     if ( ! ( g = CreateContext( &DirSetGList )))
  867.         return( 1L );
  868.  
  869.     for( lc = 0, tc = 0; lc < DirSet_CNT; lc++ ) {
  870.  
  871.         CopyMem((char * )&DirSetNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  872.  
  873.         ng.ng_VisualInfo = VisualInfo;
  874.         ng.ng_TextAttr     = Font;
  875.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  876.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  877.         ng.ng_Width     = ComputeX( ng.ng_Width );
  878.         ng.ng_Height     = ComputeY( ng.ng_Height);
  879.  
  880.         DirSetGadgets[ lc ] = g = CreateGadgetA((ULONG)DirSetGTypes[ lc ], g, &ng, ( struct TagItem * )&DirSetGTags[ tc ] );
  881.  
  882.         while( DirSetGTags[ tc ] ) tc += 2;
  883.         tc++;
  884.  
  885.         if ( NOT g )
  886.             return( 2L );
  887.     }
  888.  
  889.  
  890.     DirSetZoom[0] = 182;
  891.     DirSetZoom[1] = 200;
  892.     DirSetZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)DirSetWdt, strlen((char *)DirSetWdt )) + 80;
  893.     DirSetZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  894.  
  895.     if ( ! ( DirSetWnd = OpenWindowTags( NULL,
  896.                 WA_Left,    wleft,
  897.                 WA_Top,     wtop,
  898.                 WA_Width,    ww + OffX + Scr->WBorRight,
  899.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  900.                 WA_IDCMP,    IDCMP_VANILLAKEY|BUTTONIDCMP|TEXTIDCMP|IDCMP_REFRESHWINDOW|IDCMP_RAWKEY,
  901.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH,
  902.                 WA_Gadgets,    DirSetGList,
  903.                 WA_Title,    DirSetWdt,
  904.                 WA_Activate ,    TRUE,
  905.                 WA_PubScreen,    Scr,
  906.                 WA_Zoom,    DirSetZoom,
  907.                 TAG_DONE )))
  908.     return( 4L );
  909.  
  910.     if ( ROMVersion > 38 )
  911.         LendMenus( DirSetWnd , ProjectWnd );
  912.  
  913.     GT_RefreshWindow( DirSetWnd, NULL );
  914.  
  915.     return( 0L );
  916. }
  917.  
  918. void CloseDirSetWindow( void )
  919. {
  920.     if ( DirSetWnd        ) {
  921.         CloseWindow( DirSetWnd );
  922.         DirSetWnd = NULL;
  923.     }
  924.  
  925.     if ( DirSetGList      ) {
  926.         FreeGadgets( DirSetGList );
  927.         DirSetGList = NULL;
  928.     }
  929. }
  930.  
  931. void CompileRender( char *title )
  932. {
  933.     struct IntuiText    it;
  934.     UWORD            cnt;
  935.  
  936.     SetAPen( CompileWnd->RPort , 0 );
  937.     RectFill( CompileWnd->RPort , OffX , OffY , ComputeX( 288 ) , ComputeY(Font->ta_YSize + 14) );
  938.     for ( cnt = 0; cnt < Compile_TNUM; cnt++ ) {
  939.         CopyMem(( char * )&CompileIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  940.         it.IText = title;
  941.         it.ITextFont = &topaz8;
  942.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  943.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  944.         PrintIText( CompileWnd->RPort, &it, 0, 0 );
  945.     }
  946. }
  947.  
  948. int OpenCompileWindow( char *title )
  949. {
  950.     struct NewGadget    ng;
  951.     struct Gadget    *g;
  952.     UWORD        lc, tc;
  953.     UWORD        wleft = ProjectWnd->LeftEdge + (ProjectWnd->Width>>1) - 146, wtop = ProjectWnd->TopEdge + (ProjectWnd->Height>>1) - 22, ww, wh;
  954.  
  955.     ww = ComputeX( 293 );
  956.     wh = ComputeY( 44 );
  957.  
  958.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  959.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  960.  
  961.     if ( ! ( g = CreateContext( &CompileGList )))
  962.         return( 1L );
  963.  
  964.     for( lc = 0, tc = 0; lc < 1; lc++ ) {
  965.  
  966.         CopyMem((char * )&CompileNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  967.  
  968.         ng.ng_VisualInfo = VisualInfo;
  969.         ng.ng_TextAttr     = &topaz8;
  970.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  971.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  972.         ng.ng_Width     = ComputeX( ng.ng_Width );
  973.         ng.ng_Height     = ComputeY( ng.ng_Height);
  974.  
  975.         CompileGadgets[ lc ] = g = CreateGadgetA((ULONG)CompileGTypes[ lc ], g, &ng, ( struct TagItem * )&CompileGTags[ tc ] );
  976.  
  977.         while( CompileGTags[ tc ] ) tc += 2;
  978.         tc++;
  979.  
  980.         if ( NOT g )
  981.             return( 2L );
  982.     }
  983.  
  984.     CompileZoom[0] = 0;
  985.     CompileZoom[1] = 0;
  986.     CompileZoom[2] = 80;
  987.     CompileZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  988.  
  989.     if ( ! ( CompileWnd = OpenWindowTags( NULL,
  990.                 WA_Left,    wleft,
  991.                 WA_Top,     wtop,
  992.                 WA_Width,    ww + OffX + Scr->WBorRight,
  993.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  994.                 WA_IDCMP,    IDCMP_CLOSEWINDOW|TEXTIDCMP|BUTTONIDCMP|IDCMP_REFRESHWINDOW,
  995.                 WA_Flags,    WFLG_CLOSEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_RMBTRAP,
  996.                 WA_Gadgets,    CompileGList,
  997.                 WA_Zoom,    CompileZoom,
  998.                 WA_Title,    CompileWdt,
  999.                 WA_PubScreen,         Scr,
  1000.                 TAG_DONE )))
  1001.     return( 4L );
  1002.  
  1003.     GT_RefreshWindow( CompileWnd, NULL );
  1004.  
  1005.     CompileRender( title );
  1006.     return( 0L );
  1007. }
  1008.  
  1009. void CloseCompileWindow( void )
  1010. {
  1011.     if ( CompileWnd        ) {
  1012.         CloseWindow( CompileWnd );
  1013.         CompileWnd = NULL;
  1014.     }
  1015.  
  1016.     if ( CompileGList      ) {
  1017.         FreeGadgets( CompileGList );
  1018.         CompileGList = NULL;
  1019.     }
  1020. }
  1021.  
  1022. int OpenParmsLineWindow( void )
  1023. {
  1024.     struct NewGadget    ng;
  1025.     struct Gadget    *g;
  1026.     UWORD        lc, tc;
  1027.     UWORD        wleft = 188, wtop = 258, ww, wh;
  1028.  
  1029.     ComputeFont( 358, 50 );
  1030.  
  1031.     ww = ComputeX( 358 );
  1032.     wh = ComputeY( 50 );
  1033.  
  1034.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  1035.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  1036.  
  1037.     if ( ! ( g = CreateContext( &ParmsLineGList )))
  1038.         return( 1L );
  1039.  
  1040.     for( lc = 0, tc = 0; lc < 3; lc++ ) {
  1041.  
  1042.         CopyMem((char * )&ParmsLineNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  1043.  
  1044.         ng.ng_VisualInfo = VisualInfo;
  1045.         ng.ng_TextAttr     = Font;
  1046.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  1047.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  1048.         ng.ng_Width     = ComputeX( ng.ng_Width );
  1049.         ng.ng_Height     = ComputeY( ng.ng_Height);
  1050.  
  1051.         ParmsLineGadgets[ lc ] = g = CreateGadgetA((ULONG)ParmsLineGTypes[ lc ], g, &ng, ( struct TagItem * )&ParmsLineGTags[ tc ] );
  1052.  
  1053.         while( ParmsLineGTags[ tc ] ) tc += 2;
  1054.         tc++;
  1055.  
  1056.         if ( NOT g ) {
  1057.             return( 2L );
  1058.         }
  1059.     }
  1060.  
  1061.     ParmsLineZoom[0] = 188;
  1062.     ParmsLineZoom[1] = 258;
  1063.     ParmsLineZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)ParmsLineWdt, strlen((char *)ParmsLineWdt )) + 80;
  1064.     ParmsLineZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  1065.  
  1066.     if ( ! ( ParmsLineWnd = OpenWindowTags( NULL,
  1067.                 WA_Left,    wleft,
  1068.                 WA_Top,     wtop,
  1069.                 WA_Width,    ww + OffX + Scr->WBorRight,
  1070.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  1071.                 WA_IDCMP,    IDCMP_VANILLAKEY|BUTTONIDCMP|STRINGIDCMP|IDCMP_REFRESHWINDOW|IDCMP_RAWKEY,
  1072.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH,
  1073.                 WA_Gadgets,    ParmsLineGList,
  1074.                 WA_Title, ParmsLineWdt,
  1075.                 WA_Zoom,ParmsLineZoom,
  1076.                 WA_Activate ,    TRUE,
  1077.                 WA_PubScreen,    Scr,
  1078.                 TAG_DONE )))
  1079.     return( 4L );
  1080.  
  1081.     GT_RefreshWindow( ParmsLineWnd, NULL );
  1082.  
  1083.     if ( ROMVersion >= 39 )
  1084.         LendMenus( ParmsLineWnd , ProjectWnd );
  1085.  
  1086.     return( 0L );
  1087. }
  1088.  
  1089. void CloseParmsLineWindow( void )
  1090. {
  1091.     if ( ParmsLineWnd        ) {
  1092.         CloseWindow( ParmsLineWnd );
  1093.         ParmsLineWnd = NULL;
  1094.     }
  1095.  
  1096.     if ( ParmsLineGList      ) {
  1097.         FreeGadgets( ParmsLineGList );
  1098.         ParmsLineGList = NULL;
  1099.     }
  1100. }
  1101.  
  1102.